"""
@author: tk
@file: 11.25十五道题.py
@time: 2022/11/25 11:36
"""
# # 1、输入数字n，输出n天前的日期（time或者datatime模块）
n = int(input("你想知道多少天前的日期:"))


def get_day(n):
    import datetime
    days = str(datetime.date.today() - datetime.timedelta(n))
    return days


a = get_day(n)
print(a)

# # 2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
import os
print(os.listdir(r"D:\Downloads\pycharm\pycharm_compute"))

# # 3、列表去重，并且从小到大排序
lists = [1, 5, 8, 5, 6, 7, 9, 2, 7, 4, 4, 4, 4, 6, 2, 7, 1, 3]
List = []
sets = set(lists)
print(sets)
for i in range(len(sets)):
    mins = min(sets)
    List.append(mins)
    sets.remove(mins)

print(List)

# # 4、如何在一个函数内部修改全局变量
va = 1


def sb():
    global va
    va = 2


sb()
print(va)

# 5、如何跨模块共享全局变量
#   把全局变量都写在一个模块文件中，
#   使用的时候导入即可
import 第5题

print(第5题.a, 第5题.b, 第5题.c)

# 6、python的基本数据类型有哪些？
"""
整数、浮点数、复数、字符串、布尔、NoneType、列表、元组、字典、集合
"""

# 7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
import random

ints = random.randint(0, 10)
flos = random.randint(0, 9) + random.random()
floas = random.random()
print(ints, flos, floas)

# 8、python中哪些是可变数据类型，哪些是不可变数据类型
"""
可变数据类型:列表、集合、字典
不可变数据类型:元组、整数、浮点数、复数、字符串、布尔、NoneType
"""
# 9、a+=1与a=a+1有什么区别
"""
a=a+1,是先取a的值,在进行加加操作,它等同于a++;
a+=1,是先对a进行加1操作，在返回a的值等于++a;
"""

# 10、什么是pep8？说出5点它的标准
"""
PEP8就是一种编码规范，是为了让代码更好看，更容易被阅读。
1.缩进
不要使用 tab 缩进
使用任何编辑器写 Python，请把一个 tab 展开为 4 个空格
绝对不要混用 tab 和空格，否则容易出现 IndentationError
2.空格
在 list, dict, tuple, set, 参数列表的 , 后面加一个空格
在 dict 的 : 后面加一个空格
在注释符号 # 后面加一个空格，但是 #!/usr/bin/python 的 # 后不能有空格
操作符两端加一个空格，如 +, -, *, /, |, &, =
接上一条，在参数列表里的 = 两端不需要空格
括号（(), {}, []）内的两端不需要空格
3.空行
function 和 class 顶上两个空行
class 的 method 之间一个空行
函数内逻辑无关的段落之间空一行，不要过度使用空行
不要把多个语句写在一行，然后用 ; 隔开
if/for/while 语句中，即使执行语句只有一句，也要另起一行
4.换行
每一行代码控制在 80 字符以内
使用 \ 或 () 控制换行
5.命名
使用有意义的，英文单词或词组，绝对不要使用汉语拼音
package/module 名中不要出现 -
各种类型的命名规范：
6.import
所有 import 尽量放在文件开头，在 docstring 下面，其他变量定义的上面
不要使用 from foo imort *
import 需要分组，每组之间一个空行，每个分组内的顺序尽量采用字典序，分组顺序是:
标准库
第三方库
本项目的 package 和 module
"""

# # 11、给定一个字符串，找出字符串第一个重复的字符
countString = "abcdsdddfffds53453478zxcsds"
# 连续出现
for n in range(len(countString)):
    if countString[n] == countString[n + 1]:
        print("第一个重复出现的是:", countString[n], "下标是:", n, "位置是第;", n + 1)
        break

# 不连续出现
for i in countString:
    if countString.count(i)>=2:
        print("第一个在字符串中重复出现的是", i)
        break

# 12、简述深拷贝与浅拷贝
"""
浅拷贝:创造一个新容器存储数据,容器的pid和之前的不一样,但是内部存储的数据还是原来的地址,所以修改内部数据原数据也会更改
深拷贝:完全拷贝,容器地址和内部可变数据的地址都是新的,只有在拷贝可变数据类型时才有深浅拷贝才有明显的区别
"""

# 13、简述python内存机制
"""
1.管理方式
以引用计数为主,分代回收和标记清除为辅
2.
小整数池:储存常用整数(-5~256)
字符串驻留区:暂存简单字符串
"""

# 14、使用python实现冒泡排序，快速排序
num = [2, 9, 9, 5, 0, 5, 8, 6, 1, 1]

# 冒泡排序
speace = 0
indexs = 0
o = 1
while o < len(num):
    for i in range(len(num) - o):
        if num[i] > num[i + 1]:
            speace = num[i]
            num[i] = num[i + 1]
            num[i + 1] = speace
    o += 1

print(num)
# 快速排序
def quick_sort(lists, i, j):
    if i >= j:
        return list
    pivot = lists[i]
    low = i
    high = j
    while i < j:
        while i < j and lists[j] >= pivot:
            j -= 1
        lists[i] = lists[j]
        while i < j and lists[i] <= pivot:
            i += 1
        lists[j] = lists[i]
    lists[j] = pivot
    quick_sort(lists, low, i - 1)
    quick_sort(lists, i + 1, high)
    return lists



lists = [2, 9, 9, 5, 0, 5, 8, 6]
print("排序前的序列为：")
print(lists)
print("排序后的序列为：")
print(quick_sort(lists, 0, len(lists) - 1))

# 15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）
import copy

ListSpeace = []
strAgain = input("输入一串字符串:")
for L in strAgain:
    ListSpeace.append(L)

ListSpeaceA = copy.deepcopy(ListSpeace)
ListSpeaceA.reverse()
print(ListSpeaceA)
print(ListSpeace)
if ListSpeace == ListSpeaceA:
    print("是回文")
else:
    print("不是回文")
